重複資料在資料清理的過程中,可以說是最常見的問題之一,使用Pandas套件,透過duplicated()方法查找資料集的重複資料後,再利用drop_duplicates()方法刪除。
刪除重覆資料
df.drop_duplicates(keep刪除型態,ignore_index=布林值)
keep-「first」保留第一個重覆資料(預設)、「last」保留最後一筆重覆資料、「False」不保留,刪除全部重覆資料。
ignore_index-刪除後是否建立新的索引值。True表示重新建立索引,預設則為False表示不建立。
import pandas as pd
data = [[8,7,6,5,8], [3,4,2,9,3], [8,7,6,5,8], [6,None,4,None,6], [2,7,6,3,2]]
df=pd.DataFrame(data, index=['小明','小美','小明','小玉','小翔'], columns=['蘋果','芭樂','香蕉','橘子','蘋果'])
print(df)
蘋果 芭樂 香蕉 橘子 蘋果
小明 8 7.0 6 5.0 8
小美 3 4.0 2 9.0 3
小明 8 7.0 6 5.0 8
小玉 6 NaN 4 NaN 6
小翔 2 7.0 6 3.0 2
查詢那一列為重覆值
df.duplicated()
小明 False
小美 False
小明 True
小玉 False
小翔 False
dtype: bool
完全重覆的列被刪除了,保留重複資料的第一筆。
df.drop_duplicates()
蘋果 芭樂 香蕉 橘子 蘋果
小明 8 7.0 6 5.0 8
小美 3 4.0 2 9.0 3
小玉 6 NaN 4 NaN 6
小翔 2 7.0 6 3.0 2
針對某一列欄位把重覆的列刪除了,保留重複資料的第一筆。
df.drop_duplicates(['蘋果'])
蘋果 芭樂 香蕉 橘子 蘋果
小明 8 7.0 6 5.0 8
小美 3 4.0 2 9.0 3
小玉 6 NaN 4 NaN 6
小翔 2 7.0 6 3.0 2
df.drop_duplicates(subset=["蘋果"],keep="last")
預設keep="first",可以改成"last"來保留重複的最後一筆資料。
重複的值都去掉,則是把keep設為False。
df.drop_duplicates(subset='蘋果', keep='first', inplace=True)
print(df)
蘋果 芭樂 香蕉 橘子 蘋果
小明 8 7.0 6 5.0 8
小美 3 4.0 2 9.0 3
小玉 6 NaN 4 NaN 6
小翔 2 7.0 6 3.0 2
inplace關鍵字參數代表直接從現有資料集中刪除重複資料。
要刪除特定欄位重複的資料,同樣可以透過subset及keep關鍵字參數來達成。
明天再繼續來探索囉~